package es.ise.core.mbg.plugins;

import java.util.List;

import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.PluginAdapter;
import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
import org.mybatis.generator.api.dom.java.Interface;
import org.mybatis.generator.api.dom.java.TopLevelClass;

/**
 * Este plugin establece para cada modelo, mapper o clase de ejemplo, una superclase
 * con parametro igual a su propia clase, para ser usado después por la DSL de acceso
 * a datos
 * 
 * @author Paco
 */
public class SuperclassesPlugin extends PluginAdapter
{
	/**
	 * {@inheritDoc}
	 * 
	 * @return siempre devuelve <code>true</code> porque no hay comprobaciones que hacer
	 */
	@Override
	public boolean validate(List<String> arg0)
	{
		return true;
	}

	@Override
	public boolean clientGenerated(Interface interfaze, TopLevelClass clazz, IntrospectedTable table)
	{
		interfaze.addImportedType(new FullyQualifiedJavaType("es.ise.core.mappers.BaseMapper"));
		interfaze.addSuperInterface(new FullyQualifiedJavaType(String.format("BaseMapper")));
		return true;
	}

	@Override
	public boolean modelBaseRecordClassGenerated(TopLevelClass clazz, IntrospectedTable table)
	{
		if(table.hasPrimaryKeyColumns())
		{
			clazz.addImportedType(new FullyQualifiedJavaType("es.ise.core.model.BaseTable"));
			clazz.setSuperClass(String.format("BaseTable"));
		}
		else
		{
			clazz.addImportedType(new FullyQualifiedJavaType("es.ise.core.model.BaseView"));
			clazz.setSuperClass(String.format("BaseView"));
		}
		return true;
	}

	@Override
	public boolean modelExampleClassGenerated(TopLevelClass clazz, IntrospectedTable table)
	{
		clazz.addImportedType(new FullyQualifiedJavaType("es.ise.core.model.example.BaseExample"));
		clazz.setSuperClass(String.format("BaseExample"));
		return true;
	}

	
}
